From: Brion Vibber Date: Tue, 15 Aug 2006 05:42:37 +0000 (+0000) Subject: Quickie script to dump out list of filenames of used images. X-Git-Tag: 1.31.0-rc.0~55987 X-Git-Url: http://git.cyclocoop.org/%7D%7Cconcat%7B?a=commitdiff_plain;h=4e29f8262aedd3e6d5fe5aa0d740f4fd15c16a81;p=lhc%2Fweb%2Fwiklou.git Quickie script to dump out list of filenames of used images. Those not present in the local database will be taken from the shared database. List can be sorted and fed to tar to make archives. --- diff --git a/maintenance/dumpUploads.php b/maintenance/dumpUploads.php new file mode 100644 index 0000000000..e82515ef5f --- /dev/null +++ b/maintenance/dumpUploads.php @@ -0,0 +1,110 @@ +mAction = 'fetchUsed'; + $this->mBasePath = $IP; + $this->mShared = $wgUseSharedUploads; + + if( isset( $args['help'] ) ) { + $this->mAction = 'help'; + } + } + + function run() { + $this->{$this->mAction}(); + } + + function help() { + echo << list-o-files.txt + +Options: +--local List all local files, used or not. No shared files included. +--used Skip local images that are not used +--shared Include images used from shared repository + +FIXME: options not implemented yet ;) + +END; + } + + /** + * Fetch a list of all or used images from a particular image source. + * @param string $table + * @param string $directory Base directory where files are located + * @param bool $shared true to pass shared-dir settings to hash func + */ + function fetchUsed() { + $dbr = wfGetDB( DB_SLAVE ); + $image = $dbr->tableName( 'image' ); + $imagelinks = $dbr->tableName( 'imagelinks' ); + + $sql = "SELECT DISTINCT il_to, img_name + FROM $imagelinks + LEFT OUTER JOIN $image + ON il_to=img_name"; + $result = $dbr->query( $sql ); + + while( $row = $dbr->fetchObject( $result ) ) { + if( is_null( $row->img_name ) ) { + if( $this->mShared ) { + $this->outputShared( $row->il_to ); + } + } else { + $this->outputLocal( $row->il_to ); + } + } + $dbr->freeResult( $result ); + } + + function outputLocal( $name ) { + global $wgUploadDirectory; + return $this->outputItem( $name, $wgUploadDirectory, false ); + } + + function outputShared( $name ) { + global $wgSharedUploadDirectory; + return $this->outputItem( $name, $wgSharedUploadDirectory, true ); + } + + function outputItem( $name, $directory, $shared ) { + $filename = $directory . + wfGetHashPath( $name, $shared ) . + $name; + $rel = $this->relativePath( $filename, $this->mBasePath ); + echo "$rel\n"; + } + + /** + * Return a relative path to $path from the base directory $base + * For instance relativePath( '/foo/bar/baz', '/foo' ) should return + * 'bar/baz'. + */ + function relativePath( $path, $base) { + $path = explode( DIRECTORY_SEPARATOR, $path ); + $base = explode( DIRECTORY_SEPARATOR, $base ); + while( count( $base ) && $path[0] == $base[0] ) { + array_shift( $path ); + array_shift( $base ); + } + foreach( $base as $prefix ) { + array_unshift( $path, '..' ); + } + return implode( DIRECTORY_SEPARATOR, $path ); + } +} + +$dumper = new UploadDumper( $options ); +$dumper->run(); + +?> \ No newline at end of file